﻿#pragma once
#include <cmath>
#include <iostream>
#include "CoordSys.h"
#include "TimeSys.h"
#include "ReadN.h"

// 电离层延迟误差改正类
class IonosphericCorr
{
public:
    // 构造函数
    IonosphericCorr();
    IonosphericCorr(double alpha[4], double beta[4]);

    // 析构函数
    ~IonosphericCorr();

    // 设置Klobuchar模型参数
    void set_klb_params(double alpha[4], double beta[4]);

    // Klobuchar模型电离层延迟改正（函数重载）
    double klobuchar_corr(const XYZ& receiverPos, const XYZ& satPos,
        BaseT obsTime, double frequency);
    double klobuchar_corr(double elevation, double azimuth,
        const BLH& receiverBLH, BaseT obsTime);

    // 计算高度角和方位角
    void compute_elevation_azimuth(const XYZ& receiverPos, const XYZ& satPos,
        double& elevation, double& azimuth);

    // 测试函数
    void test(const XYZ& receiverPos, const XYZ& satPos, BaseT obsTime);

private:
    // Klobuchar模型参数
    double alphaParams[4];  // α参数数组
    double betaParams[4];   // β参数数组

    // 坐标系统对象指针
    CoordSys* coordSys;

    // 计算地心角
    double compute_earth_central_angle(const BLH& receiverBLH,
        double elevation, double azimuth);

    // 计算地磁纬度
    double compute_geomagnetic_latitude(double latitude, double longitude);
};